package com.gkzf.ai.module.system.service.appUser;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.gkzf.ai.framework.common.pojo.PageResult;
import com.gkzf.ai.module.system.controller.admin.auth.vo.WxAuthLoginReqVO;
import com.gkzf.ai.module.system.controller.app.appUser.vo.UsersPageReqVO;
import com.gkzf.ai.module.system.dal.dataobject.appUser.UsersDO;
import com.gkzf.ai.module.system.dal.mysql.appUser.UsersMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import java.util.Objects;

/**
 * 用户 Service 实现类
 *
 * @author 国科智飞
 */
@Service
@Validated
public class UsersServiceImpl implements UsersService {

    @Resource
    private UsersMapper usersMapper;

    @Override
    public Long createUsers(UsersDO usersDO) {
        // 插入
        usersMapper.insert(usersDO);
        // 返回
        return usersDO.getId();
    }

    @Override
    public void updateUsers(UsersDO usersDO) {
        // 更新
        usersMapper.updateById(usersDO);
    }

    @Override
    public void deleteUsers(Long id) {
        // 删除
        usersMapper.deleteById(id);
    }


    @Override
    public UsersDO getUsers(String mpOpenId) {
        LambdaQueryWrapper<UsersDO> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(UsersDO::getMpOpenId, mpOpenId);
        UsersDO usersDO = usersMapper.selectList(queryWrapper).stream().findFirst().orElse(null);
        if (Objects.nonNull(usersDO)){
            usersDO.setMobile(redactIdCard(usersDO.getMobile()));
            return usersDO;
        }
        return new UsersDO();
    }

    @Override
    public PageResult<UsersDO> getUsersPage(UsersPageReqVO pageReqVO) {
        return usersMapper.selectPage(pageReqVO);
    }


    /**
     * 更新手机号
     * @param reqVO 更新信息
     */
    @Override
    public void updateUserInfo(WxAuthLoginReqVO reqVO) {
        LambdaUpdateWrapper<UsersDO> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(UsersDO::getMpOpenId, reqVO.getMpOpenId());
        UsersDO usersDO = new UsersDO();
        usersDO.setNickname(redactIdCard(reqVO.getMobile()));
        usersDO.setMobile(reqVO.getMobile());
        usersMapper.update(usersDO, updateWrapper);
    }

    /**
     * 对18位身份证号码进行打码，默认保留前6位和后4位。
     *
     * @param phone 手机号
     * @return 打码后的身份证号码，如果输入非法则返回null或空字符串（根据实际需求调整）
     */
    public static String redactIdCard(String phone) {
        // 默认保留前6位和后4位
        if (phone != null && phone.length() == 11) {
            return phone.substring(0, 3) + "****" + phone.substring(7);
        }
        return "";
    }


}